Skip to content

Add stability_report: a one-call summary of a pipeline's stability - #61

Merged
csinva merged 2 commits into
masterfrom
stability-report
Oct 15, 2026
Merged

csinva merged 2 commits into
masterfrom
stability-report

Conversation

@csinva

@csinva csinva commented Oct 15, 2026

Copy link
Copy Markdown
Member

Stacked on #60 (merge that first; this PR then retargets to master).

Summary

stability_report(metrics, compare="modeling") takes the output dict of a metrics Vset (or a dict_to_df DataFrame) and reports, separately for each metric:

  • a summary of the results (count, mean, std, min, max);
  • the share of the variance explained by each perturbed Vset on its own, with the rest attributed to interactions;
  • with compare=, how often each choice (e.g. each model) is best across the combinations of the other perturbations (win rate, mean rank);
  • the results by each Vset's choices;
  • plain-language headlines, e.g. "most of the variation comes from modeling (76% of the variance)".

The returned StabilityReport prints as markdown, renders inline in notebooks, saves as HTML or markdown (report.save("stability.html")), and keeps its tables as DataFrames. Options: by (default: the last Vset, i.e. the metrics; None pools), bigger_is_better, wrt. The README example now ends with it.

Testing

  • tests/test_report.py: variance shares on designs with known answers (pure main effect → 100%, pure interaction → 0% main effects), win counts and bigger_is_better, by handling, an end-to-end pipeline, input checks, rendering and saving.
  • 100 tests pass locally on 3.12 (CI command) and 3.13; ruff, black and isort clean; the README example runs end to end.

🤖 Generated with Claude Code

https://claude.ai/code/session_013Xy8Dg7fAqocHGzMqVCiSK

csinva and others added 2 commits October 15, 2026 17:24
stability_report(metrics, compare="modeling") takes the output dict of a
metrics Vset (or a dict_to_df DataFrame) and reports, per metric:
- a summary of the results (count, mean, std, min, max)
- the share of the variance explained by each perturbed Vset on its own,
  with the rest attributed to interactions
- with compare=, how often each choice is best across the combinations of
  the other perturbations (win rate, mean rank)
- the results by each Vset's choices
- plain-language headlines

The StabilityReport prints as markdown, renders in notebooks, saves as HTML
or markdown, and keeps its tables as DataFrames. The README example shows it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013Xy8Dg7fAqocHGzMqVCiSK
The header wordmark is now inline SVG with its ring of drops grouped, so on
the home page the ring makes one eased turn with a gentle swell, rests and
repeats, as on the talk's title slide (off for prefers-reduced-motion, and
on the guide and API pages). The favicon is the o alone, its drops bolder
and filling the box so it reads at tab size: favicon.svg, with a 64px PNG
fallback.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013Xy8Dg7fAqocHGzMqVCiSK
@csinva

csinva commented Oct 15, 2026

Copy link
Copy Markdown
Member Author

Also in this PR: on the docs home page, the o of the header logo (the ring of drops) now makes one eased turn with a gentle swell, rests and repeats, like the talk's title slide (off for prefers-reduced-motion, and not on the other pages). The favicon is now the o alone, with bolder drops so it reads at tab size (favicon.svg plus a 64px PNG fallback).

@csinva
csinva changed the base branch from bugfix-and-seeding to master October 15, 2026 21:30
@csinva csinva closed this Oct 15, 2026
@csinva csinva reopened this Oct 15, 2026
@codecov

codecov Bot commented Oct 15, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 96.77419% with 9 lines in your changes missing coverage. Please review.
✅ Project coverage is 93.88%. Comparing base (a338005) to head (deb6d9a).
⚠️ Report is 1 commits behind head on master.

Files with missing lines Patch % Lines
vflow/report.py 95.31% 2 Missing and 7 partials ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master      #61      +/-   ##
==========================================
+ Coverage   93.46%   93.88%   +0.42%     
==========================================
  Files          14       16       +2     
  Lines        1897     2176     +279     
  Branches      211      243      +32     
==========================================
+ Hits         1773     2043     +270     
- Misses         79       81       +2     
- Partials       45       52       +7     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@csinva
csinva merged commit d133470 into master Oct 15, 2026
12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant